package com.by.product.api.service;

import com.by.product.api.vo.ProductVo;

public interface IProductService {

    /**
     * 根据ID获取商品信息。
     *
     * @param id 商品ID
     * @return 商品VO，如果不存在则为null
     */
    ProductVo getProductById(Long id);

    /**
     * 异步扣减数据库库存。
     * 这个方法由消息补偿服务调用，不应被业务方直接调用。
     *
     * @param orderId 订单ID
     */
    void decreaseStock(Long orderId);

    /**
     * 异步回滚数据库库存。
     * 这个方法由消息补偿服务调用，当订单被取消时触发。
     *
     * @param orderId 订单ID
     */
    void rollbackStock(Long orderId);

    /**
     * 确认库存扣减。
     * 这是一个可选方法，用于在收到“支付成功”消息时，再次确认库存状态。
     *
     * @param orderId 订单ID
     */
    void confirmStockDeduction(Long orderId);
}